package main

import (
	"fmt"
)

/**
map 操作
1、map 中的数据是无序的
2、map 的定义
	map[k][v] 或 map[k1]map[k2]v2 ==> k,v表示数据类型
	> var map1 map[string]string
	> map2 := make(map[string]string)
3、遍历map使用range关键字
4、获取map中的值，判断某个key是否在map中
5、删除map中的key,使用delete函数
6、map中可以作为key的条件
	> map 使用哈希表，必须可以比较相等
	> 除了 slice、map、function等内建类型除外，其余内建类型都可以作为key
	> Struct 类型不包含上述字段，也可以作为key
*/

/**
创建map
*/
func createMap() map[string]string {
	// 定义map的方式一
	var map1 = map[string]string{
		"name": "huan.fu",
		"age":  "26",
		"sex":  "男",
	}
	// 定义map的方式二
	var map2 = make(map[string]string)
	// 是一个空的map
	fmt.Println(map2)

	var map3 map[string]string
	fmt.Println(map3)

	return map1
}

/**
遍历map
*/
func loopMap() {
	for k, v := range createMap() {
		fmt.Println("k=", k, "v=", v)
	}
}

/**
获取map中的值
*/
func getMapValue() {
	var maps = createMap()
	name, existNameKey := maps["name"]
	fmt.Println(name, existNameKey)
	if notExistsName, key := maps["not exists key"]; key {
		fmt.Println(notExistsName)
	} else {
		fmt.Println("key 不存在")
	}
}

/**
删除map中的某个key
*/
func deleteMapValue() {
	var maps = createMap()
	delete(maps, "name")
	fmt.Println(maps)
}

func main() {
	fmt.Println(createMap())
	loopMap()
	getMapValue()
	deleteMapValue()
}
